package com.mazaiting.redisson.service;

import org.redisson.api.*;

/**
 * Redis操作Service
 *
 * @author mazaiting
 * @create_time 2022/3/22 13:23
 */
public interface IRedissonService {

    /**
     * 获取字符串对象
     *
     * @param key 键
     * @param <T> 泛型
     * @return 桶
     */
    <T> RBucket<T> getBucket(String key);

    /**
     * 获取字符串对象
     *
     * @param key 键
     * @param <K> 键
     * @param <V> 值
     * @return map
     */
    <K, V> RMap<K, V> getMap(String key);

    /**
     * 获取有序集合
     *
     * @param key 键
     * @param <V> 值
     * @return sortedSet
     */
    <V> RSortedSet<V> getSortedSet(String key);

    /**
     * 获取集合
     *
     * @param key 键
     * @param <V> 值
     * @return
     */
    <V> RSet<V> getSet(String key);

    /**
     * 获取列表
     *
     * @param key 键
     * @param <V> 值
     * @return 列表
     */
    <V> RList<V> getList(String key);

    /**
     * 获取队列
     *
     * @param key 键
     * @param <V> 值
     * @return 队列
     */
    <V> RQueue<V> getQueue(String key);

    /**
     * 获取双端队列
     *
     * @param key 键
     * @param <V> 值
     * @return 双端队列
     */
    <V> RDeque<V> getDeque(String key);

    /**
     * 获取锁
     *
     * @param key 键
     * @return 锁
     */
    RLock getLock(String key);

    /**
     * 获取读写锁
     *
     * @param key 键
     * @return 读写锁
     */
    RReadWriteLock getRwLock(String key);

    /**
     * 获取原子数
     *
     * @param key 键
     * @return 原子数
     */
    RAtomicLong getAtomicLong(String key);

    /**
     * 获取记数锁
     *
     * @param key 键
     * @return 计数锁
     */
    RCountDownLatch getCountDownLatch(String key);

    /**
     * 获取消息的Topic
     *
     * @param key 键
     * @param <M> 消息
     * @return 消息的 Topic
     */
    <M> RTopic getTopic(String key);
}